企业微信web自动化测试实战

课程反馈

课程反馈

参考链接

演练地址:https://github.com/ceshiren/JavaSDET3

Page Object

企业微信web自动化测试

echo "" | awk 'BEGIN{RS="; ";FS="="}{print "driver.manage().addCookie(new Cookie(\""$1"\", \""$2"\"));"}'

PO的代码

首页

package test_web.wework.page;

import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;

public class MainPage {

    public static ChromeDriver driver= null;

    public MainPage() {
//        System.setProperty("webdriver.gecko.driver", "/Users/seveniruby/ke/java_3/selenium/drivers/geckodriver");

        String url = "https://work.weixin.qq.com/wework_admin/frame";
//        FirefoxDriver driver=new FirefoxDriver();
        driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        driver.get(url);
        driver.manage().deleteAllCookies();

        //todo: 改成从文件读取

        //todo: 使用自己的cookie,别使用老师的
//        driver.manage().addCookie(new Cookie("pgv_pvid", "7369917120"));

        System.out.println(driver.manage().getCookies());
        driver.get(url);

    }

    public ContactPage toContact() {
        //todo:
        driver.findElement(By.cssSelector("#menu_contacts")).click();
        return new ContactPage();
    }
}

package test_web.wework.page;

import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class ContactPage {
    By addMember=By.linkText("添加成员");
    By username=By.name("username");
    By delete=By.linkText("删除");

    public ContactPage addMember(String username, String acctid, String mobile) {
        //todo:
//        try {
//            Thread.sleep(3000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }

//        new WebDriverWait(MainPage.driver, Duration.ofSeconds(10))
//                .until(ExpectedConditions.visibilityOfElementLocated(addMember));
//        //todo: 就算可点击,仍然有一定的概率是点击不成功的
//        new WebDriverWait(MainPage.driver, Duration.ofSeconds(10))
//                .until(ExpectedConditions.elementToBeClickable(addMember));


        while(MainPage.driver.findElements(this.username).size()==0){
            MainPage.driver.findElement(addMember).click();
        }

        MainPage.driver.findElement(this.username).sendKeys(username);
        MainPage.driver.findElement(By.name("acctid")).sendKeys(acctid);
        MainPage.driver.findElement(By.name("mobile")).sendKeys(mobile);
        MainPage.driver.findElement(By.cssSelector(".js_btn_save")).click();
        return this;
    }

    public ContactPage search(String keyword){
        MainPage.driver.findElement(By.id("memberSearchInput")).sendKeys(keyword);
        new WebDriverWait(MainPage.driver, Duration.ofSeconds(10))
                .until(ExpectedConditions.elementToBeClickable(delete));
        return this;
    }

    public ContactPage delete(){
        MainPage.driver.findElement(delete).click();
        MainPage.driver.findElement(By.linkText("确认")).click();
        MainPage.driver.findElement(By.id("clearMemberSearchInput")).click();
        return this;

    }
}

测试用例

package test_web.wework.testcase;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import test_web.wework.page.ContactPage;
import test_web.wework.page.MainPage;

public class TestContact {
    static MainPage main;
    static ContactPage contact;
    @BeforeAll
    static void beforeAll(){
        main=new MainPage();
        contact=main.toContact();
    }
    @Test
    void testAddMember(){

        contact.addMember("3", "3", "15600534763");
        //todo: assert
    }

    @Test
    void testSearch(){
        contact.search("3").delete();
    }

    @AfterAll
    static void afterAll(){
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        MainPage.driver.quit();
    }
}

课后作业

  • 部门的增加、删除
  • 标签的增加、删除
  • 其他的可以自己挑战下

作业提交方式:直接提交你自己项目的github地址,不用贴代码

一楼占楼

老师,findelementbyimage这个方法用法会讲嘛?

启动chromedriver一直报这个错:
Starting ChromeDriver 81.0.4044.20 (f006328e39a9769596eb506c8841c3004b24e747-refs/branch-heads/4044@{#244}) on port 2899
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
但是我的chrome和chromedriver版本都是81.xxx,版本是一致的呀

只是警告,问题不大,他的意思是chromedriver的端口如果被外部人访问到了,别人可以远程控制你的浏览器,提醒别把端口开放出去被人利用。

这个方法比较鸡肋,很多时候识别不准确,一般都是不推荐使用的,游戏公司的人也尽量少用,除非的确无法控制了再用这个方式,图片定位问题挺多的。


是哪里版本不对吗?我看引入的包是对的
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;

作业占楼

还请多多指教(改了下登录的逻辑:首次扫码后,键盘输入任意字符继续,然后就是写入cookie文件)

写得有点乱,继续改进。。。
https://github.com/Groot2001/seleniumdemo

新建标签时,【可使用人】下拉列表选择【指定管理员/应用负责人使用】时不支持
(由于选择成员列表一直为空,也不清楚怎样添加成员使列表非空,所以未实现该功能)

作业
github: wework

作业

关闭