我刚刚完成一个测试脚本并访问一个相当动态的页面。有问题的页面会显示一个元素(通常是一个单选按钮或复选框),仅当满足前一页中的某些条件时才会出现该元素。因此,我的测试将访问此页面与以前的标准无关,我想点击页面底部的“continue”元素,同时处理它们出现的这些元素“IF”。我有几个方法sto点击元素ID,到目前为止有以下代码:
// Selects the "Confirm" button
IWebElement radioOption = mWebDriver.FindElement(By.Id("Radio_Button_Id"));
if (radioOption.Displayed)
{
this.ClickElementById("Radio_Button_Id");
// Clicks CONTINUE
this.ClickElementById("CONTINUE");
}
else
{
// Selects CONTINUE
this.ClickElementById("CONTINUE");
}
我正在尝试使用此代码来处理如果出现单选按钮,请选择它然后选择继续按钮。此外,如果没有出现单选按钮,请忽略它并选择继续按钮。对此有任何帮助将非常感激。
答案 0 :(得分:9)
尝试这样的事情:
//Displayed
public static bool IsElementDisplayed(this IWebDriver driver, By element)
{
IReadOnlyCollection<IWebElement> elements = driver.FindElements(element);
if (elements.Count > 0)
{
return elements.ElementAt(0).Displayed;
}
return false;
}
//Enabled
public static bool IsElementEnabled(this IWebDriver driver, By element)
{
IReadOnlyCollection<IWebElement> elements = driver.FindElements(element);
if (elements.Count > 0)
{
return elements.ElementAt(0).Enabled;
}
return false;
}
你不会得到任何例外,然后测试可以继续。
答案 1 :(得分:1)
你说你得到了NoSuchElementExceptions。 radioOption.Displayed
测试以查看元素是否在页面上可见,但如果元素甚至不存在则会抛出错误。 (元素可以存在,但不可见)
要测试是否存在元素,您需要执行mWebDriver.FindElements
(注意S)。这将返回与您的选择器匹配的所有元素中的List<WebElement>
,如果找不到任何元素,它将返回大小为0的列表(并且不会抛出错误)。
这样,你的if语句将是if (radioOptions.size()!=0)
,并将检查该元素是否存在(如果它是可见的)。
答案 2 :(得分:0)
我还使用它来测试元素是否存在并获取元素的句柄(如果存在):
namespace SeleniumExtensions
{
public static class WebDriverExtensions
{
public static bool TryFindElement(this IWebDriver driver, By by, out IWebElement element)
{
try
{
element = driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
element = null;
return false;
}
}
public static bool IsElementEnabled(this IWebDriver driver, By by)
{
IWebElement element = null;
if (driver.TryFindElement(by, out element))
{
return element.Enabled;
}
return false;
}
}
}
这允许代码如下:
using SeleniumExtensions;
// ...
IWebElement element = null;
if (driver.TryFindElement(By.Id("item-01"), out element)
{
// use element
}
else
{
// element is null
}
或者:
if (driver.IsElementEnabled(By.Id("item-01"))
{
// item is enabled
}