Selenium - 无法选择下拉列表

时间:2018-01-01 23:48:18

标签: c# selenium

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

网站: 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标记,这使得它变得复杂。或者也许我在思考。请帮忙!

1 个答案:

答案 0 :(得分:1)

有一些潜在的df1 <- data.frame("DE" = c("Europa | Deutschland | München", "Europa | England | London", "Europa | Germany | Berlin ", "Europa | Italy | Venedig"), stringsAsFactors = FALSE) df2 <- data.frame("GE" = c("Deutschland", "Italien", "England"), "EN" = c("Germany", "Italy", "UK"), stringsAsFactors = FALSE) 元素可以为这些下拉列表提供支持。但是,只要“ul-&gt; li”下拉列表中的值发生变化,它们就会变得不可见并发生变化。

这里有两个一般选项:

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

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

select

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

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();