如何检查元素h2是否包含文本

问题描述 投票:0回答:4

我有一个按钮搜索,它将显示“未找到结果”或“另一个购买按钮”。

我想做的是创建一个if,以检查是否在“未找到结果”页面上,单击后退按钮。如果没有,请点击购买按钮。

这里是HTML代码:

<button> Search </button>
..
<div class="contents"> <h2>No results found<h/2> </div> #the message I want to check first
..
<button class="btn-standard> Buy Now </button> #buy button
...
<button class="back"> Back </button> #the button I want to click if no resul

而且我尝试过类似以下的内容:

if driver.find_element_by_xpath('//h2[text()="No results found"]'):
   driver.find_element_by_class_name('back').click()
else:
   WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'Buy Now')]"))).click()

但是它没有用。我必须使用try / catch编码吗?

另一个编辑:

我现在收到此错误。我不知道如何隐藏使我的“购买”按钮模糊的元素。

ElementClickInterceptedException: Message: Element <button class="btn-standard buyButton"> is not clickable at point (1086,641) because another element <div class="ut-click-shield showing interaction"> obscures it

python python-2.7 selenium selenium-webdriver selenium-chromedriver
4个回答
1
投票

文本为未找到结果的元素仅在搜索失败后才会出现。因此,要查找元素,您需要为element_to_be_clickable()引入WebDriverWait,并且可以使用以下基于的任何一个Locator Strategies

try:
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='contents']//h2[text()='No results found']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='back' and contains(,. 'Back')]"))).click()
except TimeoutException:
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn-standard' and contains(,. 'Buy Now')]"))).click()

1
投票

您可以实现一种检查元素是否存在的方法

public boolean checkElementExists(By by) {
    try {
        driver.findElement(by);
    } catch (NoSuchElementException e) {
        return false;
    }
    return true;
}

然后您可以将其放在if子句中

if(!checkElementExists(By.xpath("//h2[text()="No results found"]")))
    click back

0
投票

[find_element_*将抛出异常,如果元素不存在,请使用find_elements_*并检查返回的列表是否为空]

wait = WebDriverWait(driver, 20)
elements = driver.find_elements_by_xpath('//h2[text()="No results found"]')
if elements:
    wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'back'))).click()
else:
    wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'Buy Now')]"))).click()

0
投票

您可以获取元素列表,并检查元素的大小是否大于0,然后可以单击它。您可以这样做:

 results = driver.find_elements_by_xpath('//h2[text()="No results found"]')
 if(len(results)>0):
     driver.find_element_by_xpath("//button[contains(text(),'Back')]").click()
 else:
     driver.find_element_by_xpath("//button[contains(text(),'Buy Now')]").click()
© www.soinside.com 2019 - 2024. All rights reserved.