Selenium javascript onkeypress无效

时间:2017-05-09 09:28:38

标签: javascript python selenium

我正努力在提交按钮中点击一下,该按钮已被禁用但不应该。我有一个输入框,可以像这样监听onKeyPress:

function isValidEmailAddress() {
        var pattern = "...."
        if(pattern.test($('#input').val())){
            $('#submitButton').removeAttr('disabled');
        }else{
            $('#submitButton').attr('disabled','disabled');
        }

我有一个按钮,我必须点击:

<button type="submit" id="submitButton" disabled="disabled">Login</button>

当我在页面中并从键盘输入时,它可以正常工作。但我不知道为什么在selenium不和dunno如何更好地调试它。 Selenium代码:

elem = self.browser.find_element_by_css_selector('input_css')
elem.clear()
elem.send_keys('string_to_write')

为了您的信息,elem是正确的,我检查了它。

当我在输入框中写入正确的字符串后尝试单击按钮时,该按钮被禁用。

我试图为自己执行javascript:

self.browser.execute_script("arguments[0].removeAttribute('disabled')", selector)

其中selector是按钮。但似乎它不起作用,它也没有抛出错误。

1 个答案:

答案 0 :(得分:0)

在您的代码中,您似乎尝试通过强制从DOM中删除“禁用”属性来启用提交按钮。一种解决方案是使用xpath在元素选择中更具体(即仅在激活时选择它。您可以使用如下函数:

function getElementByXpath(path) {
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

console.log( getElementByXpath("//button[@id='submitButton']") 

);

然后您可以尝试点击您刚刚找到的元素:

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

祝你好运!

PS。如果上述方法不起作用,那么在send_keys之后,按钮没有尽快启用。尝试引入1秒延迟来破坏或确认神话! ;)

PS2另一种方法可能是搜索disabled属性,如果找不到该元素(即FALSE - &gt;意味着该按钮已启用,则只能使用前面指向'id'的xpath单击它)。 element = disabled的xpath是:

  

//按钮[@ id ='submitButton'和@ disabled ='disabled']

因此,您可以将其存储在var中,并从那里控制流程:

 var buttonDisabled= driver.findElement(webdriver.By.xpath('//button[@id='submitButton' and @disabled='disabled']'));

 if(isFound=true)
            {
                //THINGS TO DO IF BUTTON WAS FOUND (DISABLED)
            }
            else
            {
                //THINGS TO DO IF BUTTON WAS -NOT- FOUND (ENABLED)
            }

希望这有帮助! :)