拿起一个小型学习项目,通过修改日期找到最便宜的汽车租赁。
流程:选择省 - >租车 - >输入机场代码,更改日期,时间。
问题:无法选择接送时间或下车时间。
到目前为止我的代码(效果很好) -
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();
现在,问题 -
new SelectElement(Driver.FindElementById("pickupTimeWidget")).SelectByText("11:00 AM");
'元素不可见:元素当前不可见,可能无法操作
Driver.FindElementByXPath("//div[@id=\"pickup_time_widget\"]/div/ul/li[@data-value=\"07:30 AM\"]").Click();
元素不可见
new SelectElement(Driver.FindElementByXPath("//div[@id=\"pickup_time_widget\"]/div/ul/li[@data-value=\"07:30 AM\"]")).SelectByIndex(5);
元素应该被选中但是李
任何从拾取时间/下降时间下拉菜单中选择值的帮助都非常感谢!通常,我看过很多网站只实现了select
标签,但是这个网站也有ul/li
标签,这让它变得复杂。或者也许我在思考。请帮忙!
有潜在的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();