webelement中的方法getText()和getAttribute(java.lang.String name)

本文介绍如何使用Selenium WebDriver获取网页元素的可见文本及属性值,包括使用getText()方法获取链接文本和使用getAttribute()方法获取input元素的默认值。

getText(): 获取元素的visible内嵌文字。

如csdn首页中的链接<a class="left" target="_blank" href="http://www.youkuaiyun.com" onclick="LogClickCount(this,285);">首页</a>

通过

        driver = new FirefoxDriver();
        url = "http://www.youkuaiyun.com/";
        driver.get(url);
        driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
        String text = driver.findElement(By.xpath("//div[@class='csdn_pub_nav_bg']/div[1]/a[1]")).getText();

可取得文本“首页”。

而对于页面上输入类型的元素(input,textarea等),则不能通过getText()获取到相应的文本。如csdn首页中搜索框中默认的“搜索”二字。其标签为<input id="srch1" class="search" type="text" onblur="if(this.value=='') this.value='搜索'; this.style.color='#999'; return true;" onfocus="if(this.value=='搜索') this.value='';this.style.color='#333'; return true;" value="搜索" name="passwordtwo" style="color: rgb(153, 153, 153);"/>

通过String errorValue = driver.findElement(By.xpath("//input[@class='search']")).getText();得到的值为空。此时应使用getAttribute()

getAttribute(String name):获取元素中名为name的属性的值。

通过String value = driver.findElement(By.xpath("//input[@class='search']")).getAttribute("value"); 即可获取到值“搜索”。

通过String type = driver.findElement(By.xpath("//input[@class='search']")).getAttribute("type");则对应可获得值“text”。


Java 应用中,`java.lang.InterruptedException: sleep interrupted` 是一种常见的异常,通常发生在使用 `Thread.sleep()`、`Object.wait()` 或 `Thread.join()` 等方法时,当前线程被中断。这种异常在 Selenium 自动化测试中也可能出现,尤其是在与浏览器交互、等待元素加载、执行长时间操作或与外部系统交互时。 ### 异常原因 1. **线程中断**:当调用 `Thread.interrupt()` 方法时,如果线程正在执行 `Thread.sleep()` 或 `Thread.wait()`,就会抛出 `InterruptedException`。这通常发生在多线程环境中,例如 Selenium 测试框架中使用了并发操作。 2. **资源等待超时**:在 Selenium 中,如果一个线程在等待某个资源(如页面加载、元素出现)时被中断,也可能触发该异常。 3. **UnixProcess.waitFor() 调用**:当使用 `Runtime.getRuntime().exec()` 执行外部命令时,若调用 `Process.waitFor()` 的线程被中断,也会抛出 `InterruptedException`。 4. **显式中断处理不当**:如果代码中未正确处理中断状态,例如在捕获异常后未重新设置中断标志,可能导致后续操作出现意外中断。 ### 处理方式 1. **捕获异常并重新设置中断状态**:在捕获 `InterruptedException` 时,应恢复线程的中断状态,以便上层代码可以继续处理中断。示例代码如下: ```java try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); // 恢复中断状态 // 处理异常或终止线程 } ``` 2. **使用显式等待代替硬编码等待**:在 Selenium 中,应尽量使用 `WebDriverWait` 代替 `Thread.sleep()`,以避免不必要的线程阻塞中断风险。示例代码如下: ```java WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elementId"))); ``` 3. **确保多线程环境下正确处理中断**:在多线程环境中,需要确保每个线程都能正确响应中断请求。例如,在 Selenium 测试中,如果使用 `ExecutorService` 提交任务,应确保任务能够响应中断并及时终止。 4. **避免直接使用 `UnixProcess.waitFor()`**:在与外部命令交互时,应避免直接使用 `waitFor()`,而是使用超时机制或异步处理,以防止线程被阻塞过久。 ### 示例代码 以下是一个使用 `WebDriverWait` 替代 `Thread.sleep()` 的示例: ```java import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class SeleniumExample { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); WebDriver driver = new ChromeDriver(); driver.get("http://example.com"); WebDriverWait wait = new WebDriverWait(driver, 10); WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("targetElement"))); // 执行后续操作 element.click(); driver.quit(); } } ``` ### 相关问题 1. 如何在 Selenium 中正确处理 `StaleElementReferenceException`? 2. 在多线程环境下,如何确保 Selenium 测试的稳定性? 3. 如何避免在 Selenium 自动化测试中使用 `Thread.sleep()`? 4. 使用 `WebDriverWait` 时,如何自定义等待条件? 5.Selenium 中执行外部命令时,如何处理 `InterruptedException`?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值