通过xpath单击元素:
self.browser.find_element_by_xpath(xpath).click()
或与js:
self.browser.execute_script("arguments[0].click();", self.browser.find_element_by_xpath(xpath))
在我正在测试的页面上,如果单击是使用任一选项完成的,都会显示一个错误的登录页面,但是如果我将超时时间设置为20秒并手动单击该botton,则该页面将显示所有内容,但没有问题,没有错误页面弹出。
有人遇到过这种问题吗?
答案 0 :(得分:0)
我强烈认为您的元素尚不可单击,因为在程序试图单击该元素时尚未完全加载该元素。因此,如果您等待20秒,则不会发生此问题。我建议您看一下:https://selenium-python.readthedocs.io/waits.html
您可以使用一种方法来等待元素完全加载,然后再单击它。
仅提供一些示例代码:
driver = webdriver.Chrome()
driver.get("your.web.url")
try:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, "yourXPATH"))
)
finally:
driver.quit()
答案 1 :(得分:0)
您可以考虑使用以下功能:
#include<iostream>
using namespace std;
class Node{
public:
int data;
Node* next;
};
class LinkedLIst{
private:
Node* head;
public:
LinkedLIst(){
head=NULL;
}
void addNode(int data){
Node* newNode = new Node();
newNode->data = data;
newNode->next = NULL;
if(head == NULL){
head = newNode;
}
else{
Node* temp = head;
while(temp!=NULL){
temp = temp->next;
}
temp->next = newNode;// I think fault is here.
}
}
void display(){
Node* temp = head;
while(temp!=NULL){
cout<<temp->data<<" ";
temp = temp->next;
}
}
};
int main(){
LinkedLIst* lt = new LinkedLIst();
lt->addNode(100);
lt->addNode(200);
lt->addNode(300);
lt->display();
return 0;
}
例如:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
def test_for_clickability(driver, by_type, by_value, wait_time=0):
try:
return WebDriverWait(driver, wait_time).until(EC.element_to_be_clickable((by_type, by_value))), True
except TimeoutException:
try:
return WebDriverWait(driver, 0).until(EC.visibility_of((by_type, by_value))), FALSE
except Exception:
return (None, False)
以上内容将等待20秒,以尝试通过其XPATH查找元素。如果找不到它,则element, clickable = test_for_clickability(driver, By.XPATH, xpath, wait_time=20)
值将返回为element
。如果不是None
,则如果元素将响应None
方法调用,则clickable
将是True
。否则,您应该尝试使用element.click()
调用。