我遇到问题如果提交表单可用然后提交数据并检查响应,它似乎检查提交表单,提交数据然后不处理给出的响应,代码示例:
if (driver.FindElements(By.Name("search")).Count > 0 && driver.FindElement(By.Name("search")).Displayed)
{
driver.FindElement(By.Name("search")).SendKeys(query + Keys.Enter);
if (driver.FindElements(By.XPath("//*[@id='not found']/h2")).Count > 0 && driver.FindElement(By.XPath("//*[@id='not found']/h2")).Displayed)
{
Console.WriteLine("search not found");
driver.Manage().Cookies.DeleteAllCookies();
driver.Navigate().GoToUrl("https://example.com");
}
}
这应该做的是:
如果
driver.findelement(by.name("search")
是真的,那么
driver.findelement(by.name("search").sendkeys(query)
然后,检查提供的响应并使用if语句中的给定命令进行处理。
答案 0 :(得分:0)
我会稍微改写一下,使它更具可读性,而不是多次点击页面。每次执行for idx, row in barcodes2.iterrows():
for col in ['dash_1','dash_2','dash_3']:
if row[col].isnull():
row[col] == 'n'
else:
row[col] == 'y'
时,Selenium都会抓取页面。刮一次,使用第一次刮擦完成所有分析,然后继续。
driver.findElement()
由于如果一个元素存在且可见,你会多次检查,我会将该代码包装在一个函数中,使其更易于使用,并使代码更易于阅读。
IReadOnlyCollection<IWebElement> search = GetVisibleElements(By.Name("search"));
if (search.Any())
{
search.ElementAt(0).SendKeys(query + Keys.Enter);
if (GetVisibleElements(By.XPath("//*[@id='not found']/h2")).Any())
{
// search not found
Console.WriteLine("search not found");
Driver.Manage().Cookies.DeleteAllCookies();
Driver.Navigate().GoToUrl("https://example.com");
}
else
{
// search found
// do stuff here
}
}
此函数根据提供的定位器定位元素,将其过滤为仅显示的元素,然后返回列表。然后,您可以查看脚本中返回列表中是否有任何元素。