web中js的运用

JavaScript046

web中js的运用,第1张

用途:滑动web页面

参数说明

x:屏幕向右移动的距离

y:屏幕向下移动的距离

用途:以下方法可以删除元素的任何属性,主要用来移除时间控件的readonly属性

参数说明

css::css表达式

index:索引值,默认0,标识第一个元素

attribute:元素的某个属性,比如readonly,value,name等

用途:方便用户查看当前操作的是哪个页面元素,也方便测试人员定位问题

参数说明

css:css表达式

index:索引值,默认0,标识第一个元素

用途:由于web自动化的最大问题就是稳定性比较差,有些时候使用selenium无法点击元素,因此我们可以使用JS实现元素的点击操作

参数说明

css:css表达式

index:索引值,默认0,标识第一个元素

用途:用来清除输入框的内容

参数说明

css:css表达式

index:索引值,默认0,标识第一个元素

用途:输入框中输入内容

参数说明

css:css表达式

value:待输入的数据

index:索引值,默认0,标识第一个元素

以上所有的JS操作,还可以结合selenium中的WebElement按照以下方式实现,因为JS中查找元素的方法有限,比如xpath定位,在js中不存在

如滚动页面

参数说明

element:通过selenium中的定位方法查找到的WebElement元素对象

arguments[0]:代表execute_script()方法的第二个参数

我们简单的写个测试脚本来测试一下以上JS脚本是否能够顺利执行

js_element.py

test_js.py

Safari ---->偏好设置------>高级------->在菜单栏显示开发菜单

Safari------>开发------->停用JavaScript 不勾选

允许在智能搜索栏使用JS 勾选

一、h5 调用 OC,给OC传值

   1、在WKWebview初始化的时候,先注册JS方法

       //这个类主要用来做native与JavaScript的交互管理

       WKUserContentController * wkUController = [[WKUserContentController alloc] init]

        //注册一个name为jsToOcNoPrams的js方法,设置处理接收JS方法的代理

        [wkUController addScriptMessageHandler:self  name:@"jsToOcNoPrams"]

       [wkUController addScriptMessageHandler:self name:@"jsToOcWithPrams"]

        config.userContentController = wkUController

2、拦截js方法,接收参数

注意:遵守WKScriptMessageHandler协议,代理是由WKUserContentControl设置

  //通过接收JS传出消息的name进行捕捉的回调方法

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{

    NSLog(@"name:%@\\\\n body:%@\\\\n frameInfo:%@\\\\n",message.name,message.body,message.frameInfo)

    //用message.body获得JS传出的参数体

    NSDictionary * parameter = message.body

    //JS调用OC

    if([message.name isEqualToString:@"jsToOcNoPrams"]){

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"js调用到了oc" message:@"不带参数" preferredStyle:UIAlertControllerStyleAlert]

        [alertController addAction:([UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

        }])]

        [self presentViewController:alertController animated:YES completion:nil]

    }else if([message.name isEqualToString:@"jsToOcWithPrams"]){

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"js调用到了oc" message:parameter[@"params"] preferredStyle:UIAlertControllerStyleAlert]

        [alertController addAction:([UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

        }])]

        [self presentViewController:alertController animated:YES completion:nil]

    }

}

3、在webview释放注销之前移除js方法

      //移除注册的js方法

        [[_webView configuration].userContentController removeScriptMessageHandlerForName:@"jsToOcNoPrams"]

二、oc调用H5,给H5传值

1、//OC调用JS changeColor()是JS方法名,completionHandler是异步回调block

    NSString *jsString = [NSString stringWithFormat:@"changeColor('%@')", @"Js参数"]

    [_webView evaluateJavaScript:jsString completionHandler:^(id _Nullable data, NSError * _Nullable error) {

        NSLog(@"改变HTML的背景色")

    }]

//改变字体大小 调用原生JS方法

    NSString *jsFont = [NSString stringWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'", arc4random()%99 + 100]

    [_webView evaluateJavaScript:jsFont completionHandler:nil]

2、// 页面加载完成之后调用

- (void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation{

    [SVProgressHUDdismiss]

NSString* jsStr = [NSStringstringWithFormat:@"payResult('%@')",@"true"]

[self.webView evaluateJavaScript:jsStrcompletionHandler:^(id_Nullable result,NSError* _Nullable error) {

NSLog(@"==%@----%@",result, error)

    }]

}