当前位置: 首页 > 知识库问答 >
问题:

Selenium、Java、屏幕截图和点击按钮有问题

廉展鹏
2023-03-14

这是关于Selenium和Click的另一个问题。我已经挣扎了大约两天,无法让它工作-我已经在互联网上尝试了答案,现在我需要一个共同的努力。提前谢谢!!

我在以下网站上工作http://144.76.109.38/peTEST-如果您想回顾我的步骤,这可能会有所帮助。

我正在尝试填写登录表单,然后点击登录,看到答案页面。

这是我的代码:

import java.io.File;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.Writer;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.Select;
public class toJava {
        public static void main(String[] args) {
                System.setProperty("webdriver.gecko.driver","/home/tallen/RTI/lib/geckodriver/geckodriver");
                WebDriver driver = new FirefoxDriver();
                driver.get("http:144.76.109.38/peTEST");
                File SF2 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
                try{
                    FileUtils.copyFile(SF2, new File("./out-004.png"));
                }catch(IOException ioe){
                        System.out.println("There was an IO error");
                }
                driver.findElement(By.id("user_login_name")).click();
                WebElement WE4 = driver.findElement(By.id("user_login_name"));
                WE4.sendKeys("Superuser");
                driver.findElement(By.id("user_password")).click();
                WebElement WE6 = driver.findElement(By.id("user_password"));
                WE6.sendKeys("Jkerouac1!");
                WebElement WE7 = driver.findElement(By.xpath(".//*[@type='button'][@onclick='login()'][@value='Login']"));
                WE7.sendKeys(Keys.ENTER);
                File SF8 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
                try{
                        FileUtils.copyFile(SF8, new File("./out-005.png"));
                }catch(IOException ioe){
                        System.out.println("There was an IO error");
                }
                driver.quit();
        }
}

所以基本上我打开页面,截图输入用户名和密码,点击登录,然后截图。

编译和运行都是干净的,没有异常,也没有问题。我甚至有两张截图。第一个屏幕截图显示登录页面-未输入任何数据。第二个屏幕截图显示了已填充的登录页面,我要单击的按钮已标记,但没有显示成功登录后将获得的“欢迎页面”。屏幕截图显示了标记的按钮,我知道我已经找到了元素。我已经在脚本中给出了登录信息,以防您想先试用Selenium。

为什么登录按钮没有被“点击”我尝试过点击、执行等。无济于事。我甚至尝试过含蓄地等待——仍然一无所获。

我尝试过高级使用交互,但仍然一无所获。

我对Selenium和Java非常陌生,我希望这只是我忽略的一些愚蠢的东西。但是在浏览了网络之后,那里的解决方案就没有什么帮助了。

我正在研究Debian-70-Wheezy-64-LAMP

我的Selenium图书馆来自client-combined-3.0.1-nodeps.jar

我的Gecko驱动是v0.11.1-linux64

谢谢你的帮助!!!

共有1个答案

越胤
2023-03-14

您好,
我不知道这是否会导致问题,但无论如何,对于登录按钮,我会使用

WE7.click();

我在GeckoDriver工作了一段时间,与该地区一些有经验的人交谈,他们告诉我Gecko有很多问题尚未解决<他们总是建议我不要使用GeckoDriver,因为它似乎经常失败,并告诉我改用FirefoxDriver
要尝试这种方式,这一点很重要,您只需继续使用Firefox的旧版本,即与FirefoxDriver兼容的46版(该版本适合我,您可以从类似的地方下载),并避免使用GeckoDriver。正如我在这里发现的那样,47版似乎与FirefoxDriver配合使用
请记住:当您安装这些早期版本的Firefox时,不要忘记转到“设置”并禁用自动更新和后台更新,因为如果您不这样做,您将很快以需要GeckoDriver的最新版本结束。

此外,您可以尝试以下验证:

if(WE7.isDisplayed() && WE7.isEnabled()){
    WE7.click();
}

在您试图对web元素采取操作时,如果页面未完全加载,这种验证会有所帮助。如果元素未准备就绪,您将单击它而不会出现错误,但它将无法工作希望这也适用于您!

 类似资料:
  • 我正在使用Selenium和Chrome驱动程序来拍摄一个站点的屏幕截图,并将窗口尺寸设置为800x600。当我看到.png时,它比这个值更大,并且每个屏幕分辨率都有变化。差异大于滚动条,将其设置为捕获800x600,它将产生1179x704图像(我的监视器res是3840 x 2160)。这也会根据监视器上的分辨率而改变。有没有一种方法可以设置它,这样无论屏幕分辨率是多少,输出都是一样的? 我试

  • 一直试图点击网站上的单选按钮,但无济于事。 一直试图点击单选按钮和标签,但硒一直抛出没有这样的元素错误,我在这个阶段有点沮丧。 在实际网站上可能更容易看到: https://www.theaa.ie/car-insurance/journey/getting-started 它在输入电子邮件后的页面上。试图让一些测试用例运行,但这些单选按钮不想被点击。

  • 我目前正在尝试实现Ashot来为我当前的项目截图,它正在为桌面工作。 但我想知道如何在iOS和Android设备上实现它,互联网上没有太多信息。 我使用了以下视口,它正在为iPad截图: 屏幕截图FullPage=new AShot()。拍摄策略(ShootingStrategies.viewportRetina(100,0,0,2))。截图(司机); 但是我想知道如何使用给定的属性来为其他IOS

  • 在Linux下有很多屏幕载图的工具,下面简单介绍一下: 在GNOME桌面中自带了一个屏幕截图工具,位于“动作”栏内。该工具功能很少,只能截取当前屏幕。 在GMIP中也可截图,在“文件”--“获取”菜单下有一个“屏幕抓图”选项可进行屏幕截图。它可截取任意图窗口的内容,并自动输入到GMIP中,我们可方便地进行处理和保存。 安装ImageMagick软件,它有一个工具叫import可用于屏幕截图。该工具

  • 点击按钮进行截屏,可以将截屏图像保存到相册中。 作者说:听说会和苹果的策略有冲突,应用如果上架可能会被拒绝。这个估计是看人品了吧。经过测试发现,如果先弹出对话框,然后再截屏,似乎并不能把对话框也给保存下来。 [Code4App.com]

  • HTML: 代码试用: 也试过很多其他的方法。无法单击“取消”按钮。错误: org.openqa.selenium.nosuchelementException:没有这样的元素:找不到元素:{“method”:“XPath”,“selector”:“//button[@type='button'][@class='modal-footer-button g-capitalize btn btn-l