硒单击导致页面弹出错误登录页面

时间:2020-09-21 13:02:31

标签: javascript python php html selenium

通过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,则该页面将显示所有内容,但没有问题,没有错误页面弹出。

有人遇到过这种问题吗?

2 个答案:

答案 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()调用。