0

在我的程序中,驱动程序单击进入一个页面并获取其标题并将其放入一个字符串中。在调试中,我看到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 
+0

您需要等待页面加载或使用@Guy建议的标题进行有条件等待。 – lauda

+0

根本问题是您正在单击元素。如果你这样做,Selenium将立即执行下一行代码,此时下一页尚未加载,你会得到奇怪的结果。如果你可以点击一个元素,那么Selenium会默认等待,直到完成加载页面,然后再执行下一行代码。 –

回答

0

这可能是时机的问题,这就是为什么你在较慢的调试看到正确的值,但不是当你运行该脚本。您可以使用显式的等待与ExpectedConditionsTitleIsTitleContains等待正确的标题

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

+0

我已经在我的程序中应用titleContains块,但现在它显示我的字符串包含null,并且看起来没有在等待 – Chase

+0

driver.Title是调试中的正确值以及 – Chase

+0

没关系我在重新启动vs之后得到了它的工作,谢谢! – Chase