Warm tip: This article is reproduced from stackoverflow.com, please click
html if-statement python selenium element

Element sometimes appears and sometimes does not, how to continue script either way?

发布于 2020-04-07 23:22:55

My selenium (python) script is doing some work on a website that is a dashboard I.e the actual webpage/link does not change as I interact with elements on this dashboard. I mention this as I considered simply hopping around different links via driver.get() command to avoid some of the issues I am having right now.

At one point, the script reaches a part of the dashboard that for some reason during some of my test runs has an element and other times this element is not present. I have a few lines that interact with this element as it is in the way of another element that I would like to .click(). So when this element is not present my script stops working. This is a script that will repeat the same actions with small variations at the beginning, so I need to somehow integrate some sort of an 'if' command I guess.

My goal is to write something that does this: - If this element is NOT present skip the lines of code that interact with it and jump to the next line of action. If the element is present obviously carry on.

day = driver.find_element_by_xpath('/html/body/div[4]/table/tbody/tr[4]/td[2]/a')
ActionChains(driver).move_to_element(day).click().perform()

driver.implicitly_wait(30)

lizard2 = driver.find_element_by_xpath('/html/body/div[5]/div/div[2]/div[1]/img')
ActionChains(driver).move_to_element(lizard2).perform()
x2 = driver.find_element_by_xpath('/html/body/div[5]/div/div[2]/div[2]')
ActionChains(driver).move_to_element(x2).click().perform()

driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')

So the block that starts with 'lizard2' and goes to the ActionChains line is the block that interacts with this element that is sometimes apparent sometimes not as the script goes back and forth doing the task.

The top two lines are just the code that gets me to the phase of the dashboard that has this randomly appearing element. And the scroll command at the end is what follows. As mentioned before I need the middle part to be ignored and continue to the scroll part if this 'lizard2' and 'x2' elements are not found.

I apologize if this is confusing and not really concise, I am excited to hear what you guys think and provide any additional information/details, thank you!

Questioner
plx23
Viewed
48
arkadiyala 2020-02-01 05:24
private boolean isElementPresent(By by) {
try {
    driver.findElement(by);
    return true;
} catch (NoSuchElementException e) {
    return false;
}

}