如何在 selenium java 中捕获和导航 <a> 和 <span> 标签下的元素
How to capture and navigate element under <a> and <span> tag in selenium java
我想捕获元素并在链接到 <a>
标签和 <span>
标签下的元素的页面上导航。我尝试使用 selenium IDE 但它无法捕获这些元素。因此,我在 java 中编写了代码,并参考了 Whosebug 的许多链接,但我仍然无法解决我的问题。
下面是我的 java 代码:
package com.selenium;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import org.eclipse.jetty.websocket.api.Session;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.firefox.FirefoxDriver;
public class FirstTestSelenium {
public static void main(String[] args) {
// declaration and instantiation of objects/variables
WebDriver driver;
System.setProperty("webdriver.firefox.marionette", "D:\geckodriver.exe");
driver = new FirefoxDriver();
Session session;
String baseUrl = "";
String expectedTitle = "QlikView";
String actualTitle = "";
// launch Fire fox and direct it to the Base URL
driver.get(baseUrl);
actualTitle = driver.getTitle();
System.out.println(actualTitle);
if (actualTitle.contentEquals(expectedTitle)) {
System.out.println("Test Passed!");
} else {
System.out.println("Test Failed");
}
// driver.findElement(By.xpath("//span[text()='Demand
// Summary']")).getText();
// close Fire fox
driver.findElement(By.xpath("//*[normalize-space()='S/D Summary']"));
;
driver.close();
// exit the program explicitly
System.exit(0);
}
}
下面是我的 UI 代码:
<li style="display: list-item;" order="2" rel="DocumentSH07" id="Document\SH07">
<a style="color: rgb(0, 0, 0); background: rgb(255, 255, 255) none repeat scroll 0% 0%;" href="javascript:;">
<span style="font-weight: normal; font-family: Arial; font-size: 9pt; font-style: normal; text-decoration: none;">Demand Summary</span>
</a>
</li>
请帮助我解决我的问题,因为我是 selenium 的新手,但我已经尽力了。它给出 NoSuchElementFound 异常。
谢谢!
下面的代码片段应该能够定位元素:
WebElement aTagElement = driver.findElement(By.cssSelector("a[style='color: rgb(0, 0, 0); background: rgb(255, 255, 255) none repeat scroll 0% 0%;']"));
WebElement spanTagElement = driver.findElement(By.cssSelector("span[style='font-weight: normal; font-family: Arial; font-size: 9pt; font-style: normal; text-decoration: none;']"));
详细的 UI 代码可能有助于编写更好更小的定位器。
但是您可以通过使用(对于 aTagElement 并且也可以扩展到 span 标记元素。)来减少选择器长度。
style*='background: rgb(255, 255, 255)' // meaning style contains background color rgb(255, 255, 255)
或
style^='color: rgb(0, 0, 0)' //meaning style starts with color rgb(0, 0, 0)
或
style$='0%;' //meaning style ends with 0%.
您的定位器正在寻找 "Demand Summary"
"//*[normalize-space()='Demand Summary']"
但是您提供的 HTML 显示 "S/D Summary"
<span ...>S/D Summary</span>
将定位器更改为 "//*[.='S/D Summary']"
,它应该可以工作。
使用 //*[normalize-space()='Demand Summary']
将不起作用,因为这会找到多个元素(整个正文、列表项、a 标签和 span 标签),但是您的 java 代码正在寻找一个单个元素。尝试 //span[normalize-space()='Demand Summary']
而不是
在您的代码中替换此行
driver.findElement(By.xpath("//*[normalize-space()='S/D Summary']"));
来自
driver.findElement(By.xpath("//li/a/span[text()='Demand Summary']"));
感谢大家宝贵的时间和建议,但我通过以下代码解决了它:
driver.findElement(By.linkText("Demand Summary")).click();
我想捕获元素并在链接到 <a>
标签和 <span>
标签下的元素的页面上导航。我尝试使用 selenium IDE 但它无法捕获这些元素。因此,我在 java 中编写了代码,并参考了 Whosebug 的许多链接,但我仍然无法解决我的问题。
下面是我的 java 代码:
package com.selenium;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import org.eclipse.jetty.websocket.api.Session;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.firefox.FirefoxDriver;
public class FirstTestSelenium {
public static void main(String[] args) {
// declaration and instantiation of objects/variables
WebDriver driver;
System.setProperty("webdriver.firefox.marionette", "D:\geckodriver.exe");
driver = new FirefoxDriver();
Session session;
String baseUrl = "";
String expectedTitle = "QlikView";
String actualTitle = "";
// launch Fire fox and direct it to the Base URL
driver.get(baseUrl);
actualTitle = driver.getTitle();
System.out.println(actualTitle);
if (actualTitle.contentEquals(expectedTitle)) {
System.out.println("Test Passed!");
} else {
System.out.println("Test Failed");
}
// driver.findElement(By.xpath("//span[text()='Demand
// Summary']")).getText();
// close Fire fox
driver.findElement(By.xpath("//*[normalize-space()='S/D Summary']"));
;
driver.close();
// exit the program explicitly
System.exit(0);
}
}
下面是我的 UI 代码:
<li style="display: list-item;" order="2" rel="DocumentSH07" id="Document\SH07">
<a style="color: rgb(0, 0, 0); background: rgb(255, 255, 255) none repeat scroll 0% 0%;" href="javascript:;">
<span style="font-weight: normal; font-family: Arial; font-size: 9pt; font-style: normal; text-decoration: none;">Demand Summary</span>
</a>
</li>
请帮助我解决我的问题,因为我是 selenium 的新手,但我已经尽力了。它给出 NoSuchElementFound 异常。
谢谢!
下面的代码片段应该能够定位元素:
WebElement aTagElement = driver.findElement(By.cssSelector("a[style='color: rgb(0, 0, 0); background: rgb(255, 255, 255) none repeat scroll 0% 0%;']"));
WebElement spanTagElement = driver.findElement(By.cssSelector("span[style='font-weight: normal; font-family: Arial; font-size: 9pt; font-style: normal; text-decoration: none;']"));
详细的 UI 代码可能有助于编写更好更小的定位器。
但是您可以通过使用(对于 aTagElement 并且也可以扩展到 span 标记元素。)来减少选择器长度。
style*='background: rgb(255, 255, 255)' // meaning style contains background color rgb(255, 255, 255)
或
style^='color: rgb(0, 0, 0)' //meaning style starts with color rgb(0, 0, 0)
或
style$='0%;' //meaning style ends with 0%.
您的定位器正在寻找 "Demand Summary"
"//*[normalize-space()='Demand Summary']"
但是您提供的 HTML 显示 "S/D Summary"
<span ...>S/D Summary</span>
将定位器更改为 "//*[.='S/D Summary']"
,它应该可以工作。
使用 //*[normalize-space()='Demand Summary']
将不起作用,因为这会找到多个元素(整个正文、列表项、a 标签和 span 标签),但是您的 java 代码正在寻找一个单个元素。尝试 //span[normalize-space()='Demand Summary']
而不是
在您的代码中替换此行
driver.findElement(By.xpath("//*[normalize-space()='S/D Summary']"));
来自
driver.findElement(By.xpath("//li/a/span[text()='Demand Summary']"));
感谢大家宝贵的时间和建议,但我通过以下代码解决了它:
driver.findElement(By.linkText("Demand Summary")).click();