Selenium driver.Title返回不同的值C#
问题描述:
在我的程序中,驱动程序单击进入一个页面并获取其标题并将其放入一个字符串中。在调试中,我看到driver.Title是新页面的标题,但是该字符串包含前一页的标题。我怎样才能解决这个问题,并使第二页标题分配给字符串?Selenium driver.Title返回不同的值C#
//Title == "Supreme"
driver.Navigate().GoToUrl(baseURL + "/shop/all");
driver.FindElement(By.XPath(".//*[@id='container']/article[" + num.ToString() + "]/div/a/img")).Click();
//title of this page should be Supreme: Supreme®/Schott® Shearling Bomber - Lime Green
string title = driver.Title;
//returns first title and not title of new page
答
这可能是时机的问题,这就是为什么你在较慢的调试看到正确的值,但不是当你运行该脚本。您可以使用显式的等待与ExpectedConditionsTitleIs
或TitleContains
等待正确的标题
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.TitleIs("Supreme: Supreme®/Schott® Shearling Bomber - Lime Green"));
// or
wait.Until(ExpectedConditions.TitleContains("Shearling Bomber - Lime Green"));
这将等待10秒钟,你给的条件。如果标题已经改变,它会立即继续,如果不是,你会得到TimeoutException
。
您需要等待页面加载或使用@Guy建议的标题进行有条件等待。 – lauda
根本问题是您正在单击元素。如果你这样做,Selenium将立即执行下一行代码,此时下一页尚未加载,你会得到奇怪的结果。如果你可以点击一个元素,那么Selenium会默认等待,直到完成加载页面,然后再执行下一行代码。 –
@HappyBird嗨我已经从我的xpath中删除了/ img,但没有出现我的程序正在等待。我可以看到它导航到下一页,但现在driver.Title = Supreme(第一页标题)在我的调试,我的字符串标题= null – Chase