【问题标题】:Submit() redirects to another page, while click() not allowing me to access the inner pageSubmit() 重定向到另一个页面,而 click() 不允许我访问内页
【发布时间】:2017-06-20 09:17:41
【问题描述】:

谁能解释一下 submit() 和 click() 之间的确切区别

就像我的场景一样,我想访问这个site。当我使用click() 方法单击登录按钮时。站点不允许我访问内页,而使用submit() 方法时,站点被重定向到另一个页面。

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

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() 在这里不能正常工作。

最好的问候。

【问题讨论】:

  • 这不是重复的问题,我已经提供了站点 url 以及我的代码 sn-p。但是这两种方法在这里的行为不同。你能解释一下为什么 click() 在上述网站上不能正常工作吗?
  • 添加点击前等待的方法。有时在知道按钮是否可点击的情况下执行点击方法。
  • 尝试等待,但对我来说效果不佳。

标签: java selenium selenium-webdriver


【解决方案1】:

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

您可以使用 .click() 方法点击任何按钮。点击按钮没有限制。 这意味着元素的 type = "button" 或 type = "submit",.click() 方法对两者都适用。 如果按钮在标签内或按钮在标签外,click() 方法将起作用。

.submit() 方法仅用于在单击按钮后提交表单。 这意味着元素的 type = "submit" 和 button 应该在标签内,然后只有 submit() 可以工作。

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

【讨论】:

    【解决方案2】:

    即使您手动点击按钮,它也不起作用。这可能是应用程序问题。就 Submit() 而言,它可以用于表单标签内的按钮。基本上你正在尝试提交表单。

    如果您仔细查看 HTML,当您单击按钮时,类值将更改为 "btn btn-secondary preload isLocked",如果您转到 Network 选项卡,则在后端在控制台窗口中分析 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” 在这里有所作为。

    【讨论】:

      【解决方案3】:

      尝试关注:为我工作(我猜)

      driver.manage().window().maximize();    
      driver.findElement(By.id("T1")).sendKeys("test@gmail.com");
      driver.findElement(By.id("T2")).sendKeys("test@1234");
      
      WebDriverWait wait = new WebDriverWait(driver, 20);
      WebDriverWait wait1 = new WebDriverWait(driver, 20);
      
      wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.id("loginbtn"))));
      System.out.println("Is Visible");
      wait1.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("loginbtn"))));
      System.out.println("Is clickable");
      
      driver.findElement(By.id("loginbtn")).click(); 
      

      【讨论】:

      • 你好@Kushal,我已经尝试过你的代码,但仍然面临同样的问题。
      • 我试过同样的代码;由于凭据不正确,它可以单击该按钮,因为它给了我错误。你尝试过真实的信用吗?
      • 你试过driver.findElement(By.id("loginbtn")).submit(); 然后比较点击和提交方法的行为。
      • hmm.. 如果您只使用 click() 按钮,它会以红色突出显示用户名和密码;但如果我使用 submit() 那么它会要求电子邮件重置密码。
      • 当您每年为点击提供真实信用时会发生什么?
      【解决方案4】:

      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? 链接点击...

      我只能猜测这是开发人员的错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-16
        • 2021-08-20
        • 2018-06-19
        • 2014-05-17
        • 1970-01-01
        • 2017-06-05
        • 1970-01-01
        • 2021-05-03
        相关资源
        最近更新 更多