如何使用Selenium Webdriver测试WebElement属性是否存在

时间:2017-06-30 13:24:29

标签: java selenium selenium-webdriver selenium-chromedriver

我正在测试页面上的元素(例如//img//i)是否具有alt属性。

我找不到一种方法来检测属性何时根本不存在。

这是WebElement。只是一个没有alt属性的img。

<img class="gsc-branding-img" src="https://www.google.com/cse/static/images/1x/googlelogo_grey_46x15dp.png" srcset="https://www.google.com/cse/static/images/2x/googlelogo_grey_46x15dp.png 2x"/>

这是我的代码试图确定alt的存在。我知道这不是全部必要,我只是在尝试一切。

WebElement we == driver.findElement(By.xpath("(//img)[1]"));
String altAttribute = we.getAttribute("alt");

if(altAttribute == null || altAttribute =="" || altAttribute == " ")
     {
     //attribute not found
     }

似乎它返回一个空字符串...例如,以下代码返回“beforeAfter”

System.out.println("before"+altAttribute+"After");

但是,我的if语句没有收到回复,所以我不知道该怎么做。

5 个答案:

答案 0 :(得分:3)

如果属性不存在,则应返回 null ,如果它存在且未设置则返回空字符串。我认为在你的例子中就是这种情况,如果是这样的话。然后,您应该使用equal方法来比较字符串而不是==运算符。

以下示例是关于Google搜索框, xxx 属性不存在于搜索框中,因此它将返回 null

    driver = new ChromeDriver();
    driver.get("http://google.com");
    WebElement ele = driver.findElement(By.name("q"));
    String attr = ele.getAttribute("xxx");
    if (attr == null){
        System.out.print("Attribute does not exist");
    }

    else if (attr.equals("")){
        System.out.print("Attribute is empty string");
    }

您可以通过编写以下html并将其保存为测试来自行尝试。 HTML:

<html>
    <head>
    </head>
    <body>
        <p id="one">one</p>
        <p id="two" data-se="">two</p>
        <p id="three" data-se="something">three</p>
    </body>
</html>

然后编写一个如下所示的Web驱动程序脚本:

driver.get("file:///<PATH_TO_HTML_ABOVE>/test.html");

WebElement one = driver.findElement(By.id("one"));
WebElement two = driver.findElement(By.id("two"));
WebElement three = driver.findElement(By.id("three"));

System.out.println("Does one have the data-se attribute?:  '" + one.getAttribute("data-se") + "'");
System.out.println("Does two have the data-se attribute?:  '" + two.getAttribute("data-se") + "'");
System.out.println("Does three have the data-se attribute?:  '" + three.getAttribute("data-se") + "'");

这会给你以下输出:

Does one have the data-se attribute?:  'null' 
Does two have the data-se attribute?:  '' 
Does three have the data-se attribute?:  'something'

答案 1 :(得分:2)

您应该使用选择器列出缺少属性的元素,而不是检查属性:

List<WebElement> elems = driver.findElements(By.cssSelector("img:not([alt])"));

if (elems.size() > 0) {
  // found images with alt attribute missing
}

答案 2 :(得分:0)

以下是您的问题的答案:

尝试通过其他唯一WebElement找到xpath,如下所示:

WebElement we = driver.findElement(By.xpath("(//img[@class='gsc-branding-img']"));
  

WebElement we = driver.findElement(By.xpath("//img[contains(@src,'googlelogo_grey_46x15dp.png')]"));

如果这回答你的问题,请告诉我。

答案 3 :(得分:0)

我认为你需要先处理null值。 [[[0, 0, 0], [0, 1, 0], [0, 0, 0]], [[0, 1, 0], [1, 0, 1], [0, 1, 0]], [[0, 0, 0], [0, 1, 0], [0, 0, 0]]]

答案 4 :(得分:0)

假设we是网络元素<img class="gsc-branding-img" ...

  • we.getAttribute("blabla")返回null
  • we.getAttribute("class")返回"gsc-branding-img" 因此,我们可以像这样检查:
if(we.getAttribute("blabla") == null){
    System.out.println("Attribute does not exist");
}
else {
    System.out.println("Attribute exists!");
}

与硒的python绑定类似:

we.get_attribute('blabla')返回None