提交()重定向到另一个页面,而click()不允许我访问内页

时间:2017-02-03 04:33:07

标签: java selenium selenium-webdriver

任何人都可以向我解释submit()和click()之间的确切区别吗

与我的情景一样,我想访问此site。当我使用click()方法点击登录按钮时。网站不允许我访问内部网页,使用submit()方法时,网站会重定向到另一个网页。

所以,我没有在这两种方法之间得到正确的区别。有关详细信息,请参阅下面的代码段。

driver.get("https://www.ymlp.com/login.html");
driver.manage().window().maximize();    
driver.findElement(By.id("T1")).sendKeys("test@gmail.com");
driver.findElement(By.id("T2")).sendKeys("test@1234");
driver.findElement(By.id("loginbtn")).submit();   

当您执行上面的代码网站重定向到另一个页面时,现在只需更改最后一行代码,如下面提到的代码,网站不允许我访问内页。

driver.findElement(By.id("loginbtn")).click();

任何人都可以帮我解决这个问题吗?我想知道为什么click()在这里效果不好。

最诚挚的问候。

4 个答案:

答案 0 :(得分:1)

即使您手动点击该按钮,它也无法正常工作。这可能是一个应用程序问题。就Submit()而言,它可以用于表单标签内的按钮。基本上你是想提交表格。

如果您仔细查看HTML,当您点击该按钮时,类值将更改为" btn btn-secondary preload isLocked" ,如果您在后端进入控制台窗口中的“网络”选项卡并分析login.js,它们具有一个功能

$(document).ready(function(){$("#T1").focus();$(".removeerrorontype").keypress(function(){$(this).removeClass("error");});$("#loginbtn").click(function(e){if($(this).hasClass("isLocked")){return false;}

所以,我觉得上面的条件会返回false,因此它不会进一步移动。 " isLocked" 在这里有所作为。

答案 1 :(得分:1)

submit()方法不适用于某些特定的buttoninput字段,而是适用于祖先<form>元素

它的工作方式与贝娄相似(这是Python代码,但点应该相同):

element_in_form = driver.find_element_by_id('id_of_ANY_element_inside_form') # this might be any locator, not only id
form = element_in_form.find_element_by_xpath("./ancestor-or-self::form")
driver.execute_script("arguments[0].submit()", form)

只要它出现在element_in_form内,<form>(用户名输入,密码输入,登录按钮......)就没有区别了。

Forgot Username/password?链接也位于同一表单中,出于某种原因,使用submit()您实际上不是Login按钮,而是Forgot Username/password?链接点击...

我可以猜测这是开发人员的错误

答案 2 :(得分:0)

click()和submit()以相同的方式工作,除了submit()查找表单。

您可以使用.click()方法点击任何按钮。点击按钮没有限制。  这意味着元素的类型=&#34;按钮&#34;或者键入=&#34;提交&#34;,。click()方法将适用于两者。  如果按钮位于标签内部或按钮位于标签外部,则click()方法将起作用。

.submit()方法仅用于单击按钮后提交表单。 这意味着元素类型=&#34;提交&#34;和按钮应该在标签内,然后只有submit()才能工作。

在你的情况下,为什么点击不起作用可能不是特定于submit()或click()我想

答案 3 :(得分:0)

尝试以下:为我工作(我猜)

Dim sh as Worksheet, nr as Long
For Each sh In ThisWorkbook.Worksheets
    For nr = 14 To 309
        with sh
            .Range("C" & nr).Copy
            .Range("C3").PasteSpecial xlPasteValues
            .Range("D" & nr).Copy
            .Range("C4").PasteSpecial xlPasteValues
            .Calculate
            .Range("F2").Copy
            .Range("E" & nr).PasteSpecial xlPasteValues
            .Range("I2").Copy
            .Range("F" & nr).PasteSpecial xlPasteValues
        End with
    Next nr
Next sh