Selenium - 无法选择下拉列表

问题描述 投票:1回答:1

拿起一个小型学习项目,通过修改日期找到最便宜的汽车租赁。

网站:Costco Travel

流程:选择省 - >租车 - >输入机场代码,更改日期,时间。

问题:无法选择接送时间或下车时间。

到目前为止我的代码(效果很好) -

var rootDir = Directory.GetParent(Environment.CurrentDirectory);
var chromeDriverDir = rootDir.EnumerateDirectories("ChromeDriver", SearchOption.AllDirectories);      
if ((chromeDriverDir != null) && (chromeDriverDir.Count() == 0))
    Environment.Exit(-1);

var Driver = new ChromeDriver(chromeDriverDir.ToList()[0].FullName);
Driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
Driver.Manage().Window.Position = new System.Drawing.Point(0, 0);
Driver.Manage().Window.Maximize();
Driver.Navigate().GoToUrl("https://www.costcotravel.ca/");
Driver.FindElementByXPath("//label[contains(text(), \"Ontario\")]").Click(); // Select Province
Driver.FindElementByXPath("//button[contains(text(), \"Continue\")]").Click(); // Click on Continue
Driver.FindElementByXPath("//li[@data-tab=\"rental-cars\"]/a").Click(); // Click on "Rental Cars"                    Driver.FindElementById("pickupLocationTextWidget").SendKeys("yyz");
Driver.FindElementByXPath("//li[@class=\"airport\" and @data-value=\"YYZ\"]").Click(); // Select the airport
Driver.FindElementById("pickupDateWidget").Clear();                    Driver.FindElementById("pickupDateWidget").SendKeys("01/05/2018"); // Select pick-up date
Driver.FindElementByXPath("//div[@id=\"pickup_time_widget\"]/input").Click();

现在,问题 -

  • 方法1

new SelectElement(Driver.FindElementById("pickupTimeWidget")).SelectByText("11:00 AM");

'元素不可见:元素当前不可见,可能无法操作

  • 方法2

Driver.FindElementByXPath("//div[@id=\"pickup_time_widget\"]/div/ul/li[@data-value=\"07:30 AM\"]").Click();

元素不可见

  • 方法3 - 知道它不会起作用,但无论如何都要尝试。

new SelectElement(Driver.FindElementByXPath("//div[@id=\"pickup_time_widget\"]/div/ul/li[@data-value=\"07:30 AM\"]")).SelectByIndex(5);

元素应该被选中但是李


任何从拾取时间/下降时间下拉菜单中选择值的帮助都非常感谢!通常,我看过很多网站只实现了select标签,但是这个网站也有ul/li标签,这让它变得复杂。或者也许我在思考。请帮忙!

c# selenium
1个回答
1
投票

有潜在的select元素为这些下拉列表提供动力。但是,只要“ul-> li”下拉列表中的值发生变化,它们就会变得不可见并发生变化。

这里有两个一般选项:

  • 使select元素可见,并使用SelectElement类来控制下拉列表
  • select元素不可见,而是控制“ul-> li”下拉列表

第一个选项只需要将style元素的select设置为“display:block”:

IWebElement element = Driver.FindElementById("pickupTimeWidget");

((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].style = 'display:block';", element);

new SelectElement(element).SelectByText("11:00 AM");

第二个选项首先需要点击才能打开下拉列表:

IWebElement dropdown = Driver.FindElementById("pickup_time_widget");
dropdown.Click();

然后,按值/文本查找下拉项并单击它:

IWebElement dropdownItem = dropdown.FindElementByXpath(".//li[. = '11:00 AM']"); 
dropdownItem.Click();
© www.soinside.com 2019 - 2024. All rights reserved.